import request from '@/utils/request'
import store from '@/store'

// // 测试1
// export const test1 = params => request({
//   url: '/v1_0/announcements',
//   params
// })

// // 测试2
// export const test2 = () => request({
//   url: '/v1_0/user'
// })

// 个人相关
// 登录接口dao
export const loginAPI = data => request({
  url: '/v1_0/authorizations',
  method: 'POST',
  data
})

// 首页相关
// 频道
export const channelUserAPI = () => request({
  url: '/v1_0/user/channels',
  method: 'GET'
  // // 请求头里给后台传参
  // headers: {
  //   Authorization: 'Bearer ' + store.state.user.token
  //   // 只要vuex分模块了，就影响state取值方式，如果开命名空间影响的是辅助函数的写法
  // }
})

// 22.2首页--所有频道
export const allChannelAPI = () => request({
  url: '/v1_0/channels'
  // 请求头都不用写了
})

// 22.4.1删除频道-更新用户现在已选的频道
export const updateChannelAPI = data => request({
  url: '/v1_0/user/channels',
  data,
  method: 'PUT' // 一般用来更新的方式
})

// 获取列表数据渲染
export const articleListAPI = (channel_id, page) => request({
  url: '/v1_1/articles',
  method: 'GET',
  params: {
    channel_id,
    // 外部给的参
    timestamp: (new Date()).getTime(),
    with_top: 0,
    page // 为请求下一页的数据做准备
  }
})

// 21.4文章-不感兴趣，后台删除
// 只要调这个接口，把文章id传过来，这里就会发给后台：谁不喜欢哪个文章，就会把哪个文章删掉
export const dislikeAPI = artid => request({
  url: '/v1_0/article/dislikes',
  method: 'POST',
  // headers: {
  //   Authorization: 'Bearer ' + store.state.user.token
  // },
  data: {
    target: artid
  }
})

// 21.5 举报
export const reportAPI = (artId, type) => request({
  url: '/v1_0/article/reports',
  method: 'POST',
  // headers: {
  //   // 后台会拿空格拆分字符串，必须写
  //   Authorization: 'Bearer ' + store.state.user.token
  // },
  data: {
    target: artId,
    type // 举报的类型(0-7)
  }
})

// 搜索建议列表
export const suggestSearchAPI = params => request({
  url: '/v1_0/suggestion',
  params
})

// 23.8.0 搜索-结果列表
// 搜索结果
export const searchResultListAPI = params => request({
  url: '/v1_0/search',
  params // 是url?key=value&key=value格式
})

// 24.1 详情页请求数据
export const articleDetailAPI = artid => request({
  url: `/v1_0/articles/${artid}`
})

// RestFul API - 是接口规范(抽象概念)
// (简化接口--让接口更语义化)
// 就是url地址同一个(不同的请求方式，代表不同的动作)

// 24.2文章-关注取关
// 文章作者-关注
export const followedAPI = data => request({
  url: '/v1_0/user/followings',
  method: 'post',
  data
})

// 文章作者-取消关注
export const unfollowedAPI = uid => request({
  url: `/v1_0/user/followings/${uid}`,
  method: 'delete'
})

// 24.4文章 - 点赞
export const addLikeAPI = data => request({
  url: '/v1_0/article/likings',
  method: 'post',
  data
})

// 文章 - 取消点赞
export const delLikeAPI = id => request({
  url: `/v1_0/article/likings/${id}`,
  method: 'delete'
})

// 25.1.0 -评论列表详情
// 如果外面不传，默认拿第一页(空格字符串防止报错)
export const commentListAPI = (art_id, offset) => {
  // 处理url的值
  let url = `/v1_0/comments?type=a&source=${art_id}`
  if (offset !== null) {
    url = url + `&offset=${offset}`
  }
  return request({
    url
  // 可以自己拼接，也可以传给axios让它来拼接到url?后面
  })
}

// 25.2.3小红心
// 评论 - 点赞
export const addCmtLike = cmtId => request({
  url: '/v1_0/comment/likings',
  data: {
    target: cmtId
  },
  method: 'post'
})

// 评论 - 取消点赞
export const removeCmtLike = cmtId => request({
  url: `/v1_0/comment/likings/${cmtId}`,
  method: 'DELETE'
})

// 25.7.1文章 - 发布评论
export const pubCommentAPI = (artId, content) => request({
  url: '/v1_0/comments',
  method: 'post',
  data: {
    target: artId,
    content
  }
})

// 26.1 个人中心-数据渲染
export const getUserInfoAPI = () => request({
  url: '/v1_0/user'
})

// 26.5个人中心 编辑页面
// 用户 - 个人简介信息
export const getProfileAPI = () => request({
  url: '/v1_0/user/profile'
})

// 26.6个人中心 更换头像
// 用户 - 更新用户头像
export const upUserPhotoAPI = fd => request({
  url: '/v1_0/user/photo',
  method: 'patch',
  data: fd
})

// 复习:
// 前端 -> 后端传参 有几种方式?
// url?key=value
// url/值   (前2种一般传数字/字符串)
// 请求头 - headers (传字符串)
// 请求体 - body体 (传任意类型-前提要声明Content-type, 告诉后台我的内容类型是什么)

// 请求体内容类型分为三种:
// 1. key=value&key=value的字符串               (Content-type: application/x-www-form-urlencoded)
// 2. {"key":value, "key":value}               (Content-type: application/json)
// 3. formData(表单数据)/文件二进制方式发给后台   (Content-type: multipart/form-data;分隔符) - 此请求头无需自己写, 浏览器发现你的请求体里数据是formData的会自动携带此请求头

// 修改姓名，生日，性别都使用此接口，修改传参即可
export const updateProfileAPI = data => request({
  url: '/v1_0/user/profile',
  method: 'patch',
  data
})

// 28.0更新 - token
export const refreshTokenAPI = () => request({
  url: '/v1_0/authorizations',
  method: 'PUT',
  headers: {
    // 这次要自己写：因为之前响应器请求的是不等于这个地址才执行的，而这里要等于
    // 此方法调用，直接把refresh_token同步给后台
    // user命名空间
    Authorization: `Bearer ${store.state.user.refresh_token}`
  }
})
